/**
 * @param {WebMail} oWebMail
 * @return {WebMailMailScreen}
 */
function WebMailMailScreen (oWebMail)
{
//	this.cache = {
//		Hashes: {},
//		Lists: {},
//		Messages: {},
//		Screens: {}
//	};
//
//	this.searchDesc = null;
//	this.currentListHash = null;
//	this.selectedLines = {};


	this.data = {
		Folders: {},
		Messages: {},
		HeadersSortArray: {},
		HeadersItems: {},
		Headers: {},
		Screens: {}
	};

	this.selectedFolder = null;

	this.webmail = oWebMail;
	this.screenObj = $('#mail-screen');
	this.currentPane = $('<div>');

	this.pre = new WebMailScreenPrefetch(this.webmail, this);
	this.tabs = new WebMailTabs(this.webmail, this);
	this.dataBuilder = new WebMailTemplateDataBuilder(this.webmail);

	return this;
}

WebMailMailScreen.prototype =
{
	initScreen: function ()
	{
		var obj = this;

		$.History.bind(function (sHash) {
			obj.webmail.prepearHash(sHash);
		});

		var iTimeOut = null;
		$('#info', this.screenObj).bind('ajaxSend', function (){
			var obj2 = this;
			iTimeOut = setTimeout(function() {$(obj2).text('Loading ...').show();}, 500);
		}).bind('ajaxComplete', function (){
			if (0 < iTimeOut) {clearTimeout(iTimeOut);}
			$(this).hide();
		});

		var oItem = this.webmail.parseHash($.History.getHash());
		var oParams = {
			folder: (null === oItem.folder) ? 'INBOX' : oItem.folder,
			search:(null === oItem.search) ? '' : oItem.search
		};
		
		if (null !== oItem.uid)
		{
			oParams.uids = [oItem.uid];
		}

		this.webmail.ajaxRequest('GetBase', oParams, false);

		$('#search-input', this.screenObj).keyup(function (event) {
			if ('13' == event.keyCode) {
				var sSearchDesc = $.trim($(this).val());
				obj.searchDesc = (0 < sSearchDesc.length) ? sSearchDesc : null;
				obj.initSearchRequest();
			}
		});

		$('#logout-link', this.screenObj).click(function () {
			$.cookie('xwm_auth', null);
			obj.webmail.goToHash('');
			location.reload();
		});

		this.initLiveActions();

		$(this.screenObj).removeClass('hide');
	},

	initLiveActions: function ()
	{
		var obj = this;

		// folders
		$('#left-pane', this.screenObj).delegate('#folders .folder:not(.noselect)[rel]', 'click', function () {
			var oRelHash = obj.webmail.parseHash($(this).attr('rel'));
			var oCurrentHash = obj.webmail.parseHash(obj.currentPane.attr('rel'));
			if (null === oCurrentHash.uid && oCurrentHash.folder === oRelHash.folder)
			{
				// obj.webmail.ajaxRequest('GetListHash', {folder: oRelHash.folder}, false);
			}

			obj.webmail.prepearHash($(this).attr('rel'));
		});
	},
//
//		$('#left-pane #compose', this.screenObj).delegate('#compose-link', 'click', function () {
//			obj.webmail.prepearHash(obj.webmail.generateHash({screen: 'compose'}));
//		});
//
//		// list
//		$('#right-pane', this.screenObj).delegate('.message-list .message-line[rel] .message-click-line', 'click', function (){
//			var oParent = $(this).parent();
//			if (oParent.hasClass('is-unread'))
//			{
//				oParent.removeClass('is-unread');
//				var oItem = obj.webmail.parseHash(oParent.attr('rel'));
//				setTimeout(function (){
//					obj.webmail.ajaxRequest('SetListFlags', {setaction: 'AddSeen', folder: oItem.folder, uids: [oItem.uid]});
//				}, 1000);
//			}
//			obj.webmail.prepearHash(oParent.attr('rel'));
//		});
//
//		$('#right-pane', this.screenObj).delegate('.pages .page[rel]', 'click', function (){
//			obj.webmail.prepearHash($(this).attr('rel'));
//		});
//
//		$('#right-pane', this.screenObj).delegate('.list-item .message-line[rel] input.message-checkbox:checkbox', 'click', function (){
//			obj.setSelectOfLine(this, $(this).parent(), $(this).is(':checked'))
//		});
//
//		$('#right-pane', this.screenObj).delegate('.list-item .message-line[rel] .flag', 'click', function (){
//			var oParent = $(this).parent();
//			var oItem = obj.webmail.parseHash(oParent.attr('rel'));
//
//			if (oParent.hasClass('is-flagged'))
//			{
//				oParent.removeClass('is-flagged');
//				obj.webmail.ajaxRequest('SetListFlags', {setaction: 'RemoveFlag', folder: oItem.folder, uids: [oItem.uid]});
//			}
//			else
//			{
//				oParent.addClass('is-flagged');
//				obj.webmail.ajaxRequest('SetListFlags', {setaction: 'AddFlag', folder: oItem.folder, uids: [oItem.uid]});
//			}
//		});
//
//		$('#right-pane', this.screenObj).delegate('.list-item .buttons .button[name^=action]', 'click', function () {
//			obj.actionsList($(this).attr('name'));
//		});
////		$('#right-pane', this.screenObj).delegate('.list-item select[name=actionSelSelect]', 'change', function () {
////			obj.actionsSelectList($(this).val());
////			$(':first-child', $(this).parent()).attr('selected', true);
////		});
////		$('#right-pane', this.screenObj).delegate('.list-item select[name=actionActSelect]', 'change', function () {
////			obj.actionsList($(this).val());
////			$(':first-child', $(this).parent()).attr('selected', true);
////		});
//
//		// message
//		$('#right-pane', this.screenObj).delegate('.message-item .body-tabs .button[name^=action]', 'click', function (){
//			obj.actionsMessage($(this).attr('name'));
//		});
//
//		$('#right-pane', this.screenObj).delegate('.message-item .button[name^=action]', 'click', function () {
//			obj.actionsMessage($(this).attr('name'));
//		});
//
//		$('#right-pane', this.screenObj).delegate('.message-item .attachment[rel]', 'click', function (){
//			document.location = $(this).attr('rel');
//		});
//	},
//
//
//	initSearchRequest: function ()
//	{
//		if (null === this.selectedFolder)
//		{
//			this.selectedFolder = 'INBOX';
//		}
//
//		this.webmail.prepearHash(this.webmail.generateHash({
//			folder: this.selectedFolder,
//			search: (null !== this.searchDesc) ? this.searchDesc : null
//		}));
//	},
//
//	actionsMessage: function (sButtonName)
//	{
//		var obj = this;
//		var sListRel = this.currentPane.attr('rel');
//		var oItem =  this.webmail.parseHash(sListRel);
//
//		var messageTabsChangerHandle = function (sItemClass)
//		{
//			$('.body-tabs .body-tabs-item', obj.currentPane).removeClass('selected');
//			$('.body-view .body-view-item', obj.currentPane).addClass('hide');
//
//			$('.body-tabs .body-tabs-item.' + sItemClass, obj.currentPane).addClass('selected');
//			$('.body-view .body-view-item.' + sItemClass, obj.currentPane).removeClass('hide');
//		};
//
//		if ('actionBack' === sButtonName)
//		{
//			this.webmail.prepearHash((null === this.currentListHash)
//				? this.webmail.generateHash({folder: oItem.folder}) : this.currentListHash);
//		}
//		else if ('actionSave' === sButtonName)
//		{
//			document.location = this.webmail.mailUrl + '?action=save&folder=' + encodeURIComponent(oItem.folder)
//				+ '&uid=' + encodeURIComponent(oItem.uid);
//		}
//		else if ('actionHtml' === sButtonName)
//		{
//			messageTabsChangerHandle('html');
//		}
//		else if ('actionPlain' === sButtonName)
//		{
//			messageTabsChangerHandle('plain');
//		}
//		else if ('actionShowImages' === sButtonName)
//		{
//			$('.body-tabs input:button[name=actionShowImages]', this.currentPane).addClass('hide');
//			$('img[data-x-src]', this.currentPane).each(function(){
//				$(this).attr('src', $(this).attr('data-x-src')).removeAttr('data-x-src');
//			});
//		}
//	},
//
//	actionsSelectList: function (sActionName)
//	{
//		var obj = this;
//		var oFullList = $('.message-list .message-line', this.currentPane);
//		switch (sActionName)
//		{
//			case 'actionSelectAll':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, true);
//				});
//				break;
//			case 'actionUnselectAll':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, false);
//				});
//				break;
//			case 'actionSelectRead':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, !$(this).hasClass('is-unread'));
//				});
//				break;
//			case 'actionSelectUnread':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, $(this).hasClass('is-unread'));
//				});
//				break;
//			case 'actionSelectFlag':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, $(this).hasClass('is-flagged'));
//				});
//				break;
//			case 'actionSelectUnflag':
//				oFullList.each(function () {
//					var oParent = this;
//					obj.setSelectOfLine($('.message-checkbox:checkbox', this).first(), oParent, !$(this).hasClass('is-flagged'));
//				});
//				break;
//		}
//	},
//
//	actionsList: function (sActionName)
//	{
//		var aItems = [];
//		$('.message-list .message-line[rel] .message-checkbox:checked', this.currentPane).each(function () {
//			aItems.push($(this).parent().attr('rel'));
//		});
//
//		var sListRel = this.currentPane.attr('rel');
//
//		if (aItems && 0 < aItems.length)
//		{
//			var i,oList, oItem, sFolder, aUids = [];
//			oList = this.webmail.parseHash(sListRel);
//			sFolder = oList.folder;
//			for (i in aItems)
//			{
//				oItem = this.webmail.parseHash(aItems[i]);
//				aUids.push(oItem.uid);
//			}
//
//			switch (sActionName)
//			{
//				case 'actionRead':
//					for (i in aItems)
//					{
//						$('.message-list .message-line[rel=' + aItems[i] + ']', this.currentPane).removeClass('is-unread');
//					}
//					this.webmail.ajaxRequest('SetListFlags', {setaction: 'AddSeen', folder: sFolder, uids: aUids});
//					break;
//				case 'actionUnread':
//					for (i in aItems)
//					{
//						$('.message-list .message-line[rel=' + aItems[i] + ']', this.currentPane).addClass('is-unread');
//					}
//					this.webmail.ajaxRequest('SetListFlags', {setaction: 'RemoveSeen', folder: sFolder, uids: aUids});
//					break;
//				case 'actionFlag':
//					for (i in aItems)
//					{
//						$('.message-list .message-line[rel=' + aItems[i] + ']', this.currentPane).addClass('is-flagged');
//					}
//					this.webmail.ajaxRequest('SetListFlags', {setaction: 'AddFlag', folder: sFolder, uids: aUids});
//					break;
//				case 'actionUnflag':
//					for (i in aItems)
//					{
//						$('.message-list .message-line[rel=' + aItems[i] + ']', this.currentPane).removeClass('is-flagged');
//					}
//					this.webmail.ajaxRequest('SetListFlags', {setaction: 'RemoveFlag', folder: sFolder, uids: aUids});
//					break;
//				case 'actionDelete':
//				//	this.webmail.ajaxRequest('DeleteMessages', {folder: sFolder, uids: aUids});
//					this.removeFromList(aItems, sListRel);
//					break;
//			}
//		}
//
//		return true;
//	},
//
//	removeFromList: function (aItems, sListRel)
//	{
//		var oList = this.webmail.parseHash(sListRel);
//
//		var obj = this;
//		var iCountToDelete = aItems.length;
//		var currentPage = (null === oList.page) ? 1 : parseInt(oList.page);
//
//		oList.page = currentPage + 1;
//		var sCheckCacheKey = this.webmail.generateHash(oList);
//
//		if ('undefined' !== typeof(this.cache.Lists[sCheckCacheKey]))
//		{
//			var oListCacheDiv = $('<div name="current-cache" class="hide">');
//			$('.message-line', this.cache.Lists[sCheckCacheKey]).each(function () {
//				$(this).appendTo(oListCacheDiv);
//			});
//			$('div[name="current-cache"]', this.currentPane).remove();
//			oListCacheDiv.appendTo(this.currentPane);
//		}
//
//		var i;
//		if (iCountToDelete <= $('div[name="current-cache"] .message-line', this.currentPane).length)
//		{
//			for (i in aItems)
//			{
//				delete this.selectedLines[aItems[i]];
//				$('.message-line[rel=' + aItems[i] + ']', this.currentPane).remove();
//			}
//
//			$('div[name="current-cache"] .message-line:lt(' + iCountToDelete + ')', this.currentPane).each(function () {
//				if ('undefined' !== typeof(obj.selectedLines[$(this).attr('rel')]))
//				{
//					obj.setSelectOfLine($('input:checkbox', this), this, true, false);
//				}
//				$(this).clone().appendTo('.message-list', this.currentPane);
//				$(this).remove();
//			});
//
//			this.clearListCacheFromPage(oList.folder, currentPage);
//		}
//		else
//		{
//			for (i in aItems)
//			{
//				delete this.selectedLines[aItems[i]];
//			}
//			this.clearListCacheFromPage(oList.folder, currentPage, true);
//		}
//	},
//
//	setSelectOfLine: function (obj, oRel, bIsSelect, bChangeData)
//	{
//		bChangeData = ('undefined' === typeof(bChangeData)) ? true : bChangeData;
//		if (bIsSelect)
//		{
//			if (bChangeData)
//			{
//				this.selectedLines[$(oRel).attr('rel')] = true;
//			}
//			$(obj).attr('checked', true);
//			$(oRel).addClass('selected');
//		}
//		else
//		{
//			if (bChangeData)
//			{
//				delete this.selectedLines[$(oRel).attr('rel')];
//			}
//			$(obj).attr('checked', false);
//			$(oRel).removeClass('selected');
//		}
//	},
//
//	/**
//	 * @param {string} sAction
//	 * @param {object} oItem
//	 * @return {void}
//	 */
//	buildResponseItem: function (sAction, oItem)
//	{
//		var sListItemKey, oAddDiv;
//		var bIsBase = ('undefined' !== typeof(oItem.Base) && oItem.Base);
//
//		if ('GetList' === sAction)
//		{
//			var Search = ('undefined' !== typeof(oItem.Search) && null !== oItem.Search && 0 < oItem.Search.length) ? oItem.Search : null;
//			sListItemKey = this.webmail.generateHash({
//				folder: oItem.Folder, page: oItem.Page, search: Search
//			});
//
//			this.pre.currentData(sAction, oItem);
//
//			oAddDiv = $('<div class="list-item hide">')
//				.attr('rel', sListItemKey)
//				.attr('data-x-tabname', oItem.TabName)
//				.pureJSTemplate({
//					id   : 'template-list.html',
//					data : this.buildMessageListTemplateData(oItem)
//			});
//
//			if ('undefined' !== typeof(oItem.Autocomplete))
//			{
//				for (var sKey in oItem.Autocomplete)
//				{
//					this.webmail.autoCompleteData[sKey] = oItem.Autocomplete[sKey];
//				}
//
//				this.initAutocomplete();
//			}
//
//			sCheckFolderHash = this.webmail.generateHash({folder: oItem.Folder});
//			if ('undefined' !== typeof(this.cache.Hashes[sCheckFolderHash])
//				&& oItem.Hash !== this.cache.Hashes[sCheckFolderHash])
//			{
//				this.clearListCache(oItem.Folder);
//			}
//
//			this.cache.Hashes[sCheckFolderHash] = oItem.Hash;
//
//			if (null !== oAddDiv) // add to list
//			{
//				this.cache.Lists[sListItemKey] = oAddDiv;
//				oAddDiv.appendTo('#right-pane #center-pane #list-cache');
//
//				if (bIsBase)
//				{
//					this.webmail.prepearHash(sListItemKey, true);
//				}
//				else
//				{
//					if (sListItemKey === this.currentPane.attr('rel') && 'delete' === this.currentPane.attr('data-x-action'))
//					{
//						this.webmail.prepearHash(sListItemKey, true);
//					}
//				}
//			}
//		}
//		else if ('GetMessages' === sAction)
//		{
//			if ('undefined' !== typeof(oItem.Response.length))
//			{
//				sListItemKey = null;
//				var oShow = $('<div>').pureJSTemplate({id: 'template-show-quoted-link.html', data: {}});
//				for (var iKey in oItem.Response)
//				{
//					if ('undefined' !== typeof(oItem.Response[iKey].Uid))
//					{
//						sListItemKey = this.webmail.generateHash({
//							folder: oItem.Response[iKey].Folder, uid: oItem.Response[iKey].Uid
//						});
//
//						oAddDiv = $('<div class="message-item hide">')
//							.attr('rel', sListItemKey)
//							.attr('data-x-tabname', oItem.Response[iKey].Info.TabName)
//							.pureJSTemplate({
//								id   : 'template-message.html',
//								data : this.buildMessageTemplateData(oItem.Response[iKey])
//						});
//
//						var mailtoHandle = function(event)
//						{
//							//TODO
//							event.preventDefault();
//							alert($(this).attr('href'));
//						}
//
//						if (oItem.Response[iKey].Html)
//						{
//							var oHtmlItem = $('.body-view-item.html', oAddDiv);
//							oHtmlItem.html(oItem.Response[iKey].Html);
//							oHtmlItem.find('blockquote').each(function () {
//								$(this).hide();
//								var obj = this;
//								var oClone = oShow.clone().click(function () {
//									$(this).remove();
//									$(obj).show();
//								});
//								oClone.insertBefore(this);
//							});
//							oHtmlItem.find('a[href^=mailto]').click(mailtoHandle);
//						}
//
//						if (oItem.Response[iKey].Plain)
//						{
//							$('.body-view-item.plain', oAddDiv).html(oItem.Response[iKey].Plain);
//							$('.body-view-item.plain', oAddDiv).find('a[href^=mailto]').click(mailtoHandle);
//						}
//
//						this.cache.Messages[sListItemKey] = oAddDiv;
//						this.cache.Messages[sListItemKey].appendTo('#right-pane #center-pane #message-cache');
//					}
//					else
//					{
//						if (this.currentPane)
//						{
//							this.clearListCache(oItem.Folder, true);
//						}
//						this.webmail.ajaxAppError('', 'Message is null');
//						break;
//					}
//				}
//
//				if (null !== sListItemKey && bIsBase)
//				{
//					this.webmail.prepearHash(sListItemKey, true);
//				}
//			}
//		}
//		else if ('GetListHash' === sAction)
//		{
//			var sCheckFolderHash = this.webmail.generateHash({folder: oItem.Folder});
//			if ('undefined' !== typeof(this.cache.Hashes[sCheckFolderHash])
//				&& oItem.Response !== this.cache.Hashes[sCheckFolderHash])
//			{
//				this.cache.Hashes[sCheckFolderHash] = oItem.Response;
//				this.clearListCache(oItem.Folder, true);
//			}
//		}
//		else if ('GetFolders' === sAction)
//		{
//			if (0 < oItem.Response.length)
//			{
//				this.webmail.data.Folders = oItem.Response;
//
//				$('#left-pane #folders', this.screenObj).pureJSTemplate({
//				   id   : 'template-folders.html',
//				   data : this.buildFolderListTemplateData(this.webmail.data.Folders)
//				});
//
//				if (null !== this.selectedFolder)
//				{
//					this.setActiveFolder(this.selectedFolder);
//				}
//			}
//		}
//	},

	/**
	 * @param {string} sAction
	 * @param {object} oItem
	 * @return {void}
	 */
	buildResponseItem: function (sAction, oItem)
	{
		var sListItemKey, oAddDiv;
		var bIsBase = (!IsUnd(oItem.Base) && oItem.Base);

		if ('GetMessagesHeaders' === sAction)
		{
			sListItemKey = this.webmail.generateHash({
				folder: oItem.Folder, search: oItem.Search
			});
			
			var bCalcUids = (!IsUnd(oItem.CalcUids) && oItem.CalcUids);
			if (bCalcUids && IsUnd(this.data.HeadersSortArray[sListItemKey]))
			{
				this.data.HeadersSortArray[sListItemKey] = oItem.HashUids;
						
				oAddDiv = this.dataBuilder.buildMessageList(oItem);
				
				this.data.Headers[sListItemKey] = oAddDiv;
				oAddDiv.appendTo('#right-pane #center-pane #list-cache');
			}
			
			if (!IsUnd(oItem.Response.length))
			{
				this.data.HeadersItems[oItem.Folder] = this.data.HeadersItems[oItem.Folder] || {};
				for (var iKey in oItem.Response)
				{
					this.data.HeadersItems[oItem.Folder][oItem.Response[iKey].Uid] = {
						'Dom': this.dataBuilder.buildMessageLine(oItem.Response[iKey]),
						'Response': oItem.Response[iKey]
					}
				}
			}

			if (bCalcUids)
			{
				this.webmail.prepearHash(sListItemKey, true);
			}
			else
			{
				this.rebuildMessageList(sListItemKey);
			}
		}
		else if ('GetMessages' === sAction)
		{
			if (!IsUnd(oItem.Response.length))
			{
				sListItemKey = null;
				var oShow = $('<div>').pureJSTemplate({id: 'template-show-quoted-link.html', data: {}});
				for (var iKey in oItem.Response)
				{
					if (!IsUnd(oItem.Response[iKey].Uid))
					{
						sListItemKey = this.webmail.generateHash({
							folder: oItem.Response[iKey].Folder, uid: oItem.Response[iKey].Uid
						});
						
						if (IsUnd(this.data.Messages[sListItemKey]))
						{
							oAddDiv = this.dataBuilder.buildMessage(oItem.Response[iKey]);

							var mailtoHandle = function(event)
							{
								//TODO
								event.preventDefault();
								alert($(this).attr('href'));
							}

							if (oItem.Response[iKey].Html)
							{
								var oHtmlItem = $('.body-view-item.html', oAddDiv);
								oHtmlItem.html(oItem.Response[iKey].Html);
								oHtmlItem.find('blockquote').each(function () {
									$(this).hide();
									var obj = this;
									var oClone = oShow.clone().click(function () {
										$(this).remove();
										$(obj).show();
									});
									oClone.insertBefore(this);
								});
								oHtmlItem.find('a[href^=mailto]').click(mailtoHandle);
							}

							if (oItem.Response[iKey].Plain)
							{
								$('.body-view-item.plain', oAddDiv).html(oItem.Response[iKey].Plain);
								$('.body-view-item.plain', oAddDiv).find('a[href^=mailto]').click(mailtoHandle);
							}

							this.data.Messages[sListItemKey] = {
								'Dom': oAddDiv,
								'Response': oItem.Response[iKey]
							};
							this.data.Messages[sListItemKey].Dom.appendTo('#right-pane #center-pane #message-cache');
						}
					}
					else
					{
						this.webmail.ajaxAppError('', 'Message is null');
						break;
					}
				}

				if (null !== sListItemKey && bIsBase)
				{
					this.webmail.prepearHash(sListItemKey, true);
				}
			}
		}
		else if ('GetFolders' === sAction)
		{
			if (0 < oItem.Response.length)
			{
				oAddDiv = this.dataBuilder.buildFolderList(oItem.Response)

				this.data.Folders[sListItemKey] = {
					'Dom': oAddDiv,
					'Response': oItem.Response
				};
				
				oAddDiv.appendTo('#left-pane #folders', this.screenObj);

				if (null !== this.selectedFolder)
				{
					this.setActiveFolder(this.selectedFolder);
				}
			}
		}
	},

	rebuildMessageList: function(sListItemKey)
	{
		if (!IsUnd(this.data.HeadersSortArray[sListItemKey]) && !IsUnd(this.data.Headers[sListItemKey]))
		{
			var oDomToWork = this.data.Headers[sListItemKey];
			var oWorkUl = $('.message-list', oDomToWork);
			oWorkUl.empty();

			var oItem = this.webmail.parseHash(sListItemKey);
			if (!IsUnd(this.data.HeadersItems[oItem.folder]))
			{
				for (var sUid in this.data.HeadersSortArray[sListItemKey].Uids)
				{
					if (!IsUnd(this.data.HeadersItems[oItem.folder][sUid]))
					{
						alert(this.data.HeadersItems[oItem.folder][sUid].Dom);

						oWorkUl.append(this.data.HeadersItems[oItem.folder][sUid].Dom);
					}
				}
			}
		}
	},

	/**
	 * @param {string} sFolder
	 * @return {void}
	 */
	setActiveFolder: function (sFolder)
	{
		if (null !== sFolder)
		{
			$('#folders .folder[rel]', this.screenObj).removeClass('selected');
			$('#folders .folder[rel=' + this.webmail.generateHash({folder: sFolder}) + ']', this.screenObj).addClass('selected');
			this.selectedFolder = sFolder;
		}
	},

//
//	/**
//	 * @return {object}
//	 */
//	buildComposeTemplateData: function ()
//	{
//		var oData = {List: []};
//
//		return oData;
//	},
//
	/**
	 * @param {string} sHash
	 * @return {bool}
	 */
	buildHash: function (sHash)
	{
		var sListItemKey, oHash = this.webmail.parseHash(sHash);

		var sFolder = oHash.folder || null;
		var sUid = oHash.uid || null;
		var iPage = oHash.page || null;
		var sSearch = oHash.search || null;
		var sScreen = oHash.screen || null;
		var bDoRequest = false;

		if ('compose' === sScreen) // compose
		{
			sListItemKey = this.webmail.generateHash({screen: sScreen, folder: sFolder, uid: sUid});
			if (IsUnd(this.data.Screens[sListItemKey]))
			{
				var oAddDiv = $('<div class="compose-screen hide">')
					.attr('rel', sListItemKey)
					.attr('data-x-tabname', 'Compose Screen')
					.pureJSTemplate({
						id   : 'template-compose.html',
						data : this.buildComposeTemplateData({screen: sScreen, folder: sFolder, uid: sUid})
				});

				this.cache.Screens[sListItemKey] = oAddDiv;
				oAddDiv.appendTo('#right-pane #center-pane #draft-cache');
			}

			return true;
		}
		else if (null !== sUid && null === iPage) // message
		{
			sListItemKey = this.webmail.generateHash({folder: sFolder, uid: sUid});
			if (IsUnd(this.data.Messages[sListItemKey]))
			{
				if (this.webmail.currentAction !== sHash)
				{
					bDoRequest = true;
				}

				if (bDoRequest)
				{
					this.webmail.ajaxRequest('GetMessages', {
						folder: sFolder,
						uids: [sUid]
					});
				}

				return false;
			}
		}
		else if (null !== iPage || null !== sFolder) // list
		{
			iPage = (null === iPage) ? 1 : iPage;
			sListItemKey = this.webmail.generateHash({folder: sFolder, search: sSearch});
			if (IsUnd(this.data.Headers[sListItemKey]))
			{
				if (null === this.webmail.currentAction)
				{
					bDoRequest = true;
				}
				else
				{
					var oCurrentHash = this.webmail.parseHash(this.webmail.currentAction);
					if (oCurrentHash.folder != sFolder || oCurrentHash.search != sSearch)
					{
						bDoRequest = true;
					}
				}
				if (bDoRequest)
				{
					this.webmail.ajaxRequest('GetMessagesHeaders', {
						folder: sFolder,
						search: (null === sSearch) ? '' : sSearch
					});
				}

				return false;
			}
		}

		return true;
	},

	/**
	 * @param {string} sHash
	 * @return {bool}
	 */
	setActiveHash: function (sHash)
	{
		var oHash = this.webmail.parseHash(sHash);
		var sFolder = oHash.folder || null;
		var sUid = oHash.uid || null;
		var sSearch = oHash.search || null;

		if (null !== sUid)
		{
			this.setActiveFolder(sFolder);
			return this.setActiveMessage(this.webmail.generateHash({folder: sFolder, uid: sUid}));
		}
		else if (null !== sFolder)
		{
			var sHashList = this.webmail.generateHash({folder: sFolder, search: sSearch});
			this.setActiveFolder(sFolder);
			this.rebuildMessageList(sHashList);
			return this.setActiveList(sHashList);
		}

		return false;
	},

	/**
	 * @param {string} sListItemKey
	 * @return {bool}
	 */
	setActiveMessage: function (sListItemKey)
	{
		if ('undefined' !== typeof(this.data.Messages[sListItemKey]))
		{
			this.currentPane.addClass('hide');
			this.currentPane = this.data.Messages[sListItemKey];
			this.currentPane.removeClass('hide');
			this.tabs.setActivTab(sListItemKey);
			return true;
		}
		return false;
	},

	/**
	 * @param {string} sListItemKey
	 * @return {bool}
	 */
	setActiveList: function (sListItemKey)
	{
		if (!IsUnd(this.data.Headers[sListItemKey]))
		{
			this.currentPane.addClass('hide');
			this.currentPane = this.data.Headers[sListItemKey];
			this.currentPane.removeClass('hide');
			this.tabs.setActivTab(sListItemKey);
			return true;
		}
		return false;
	},
//
//
//	setActiveSubScreen: function (sListItemKey)
//	{
//		if ('undefined' !== typeof(this.cache.Screens[sListItemKey]))
//		{
//			this.currentPane.addClass('hide');
//			this.currentPane = this.cache.Screens[sListItemKey];
//			this.currentPane.removeClass('hide');
//			this.tabs.setActivTab(sListItemKey);
//			return true;
//		}
//		return false;
//	},

//
//	
//
//
//	/**
//	 * @param {string} sFolder
//	 * @param {bool} bPrepearHash
//	 * @return {bool}
//	 */
//	clearListCache: function (sFolder, bPrepearHash)
//	{
//		bPrepearHash = ('undefined' === typeof(bPrepearHash)) ? false : bPrepearHash;
//		this.clearListCacheFromPage(sFolder, 1, bPrepearHash);
//	},
//
//	/**
//	 * @param {string} sFolder
//	 * @param {int} iPage
//	 * @param {bool} bPrepearHash
//	 * @return {bool}
//	 */
//	clearListCacheFromPage: function (sFolder, iPage, bPrepearHash)
//	{
//		var oItem , sCacheName;
//		iPage = ('undefined' === typeof(iPage)) ? 1 : iPage;
//		bPrepearHash = ('undefined' === typeof(bPrepearHash)) ? false : bPrepearHash;
//		for (sCacheName in this.cache.Lists)
//		{
//			oItem = this.webmail.parseHash(sCacheName);
//			oItem.page = (null === oItem.page) ? 1 : oItem.page;
//			if (oItem.folder === sFolder && oItem.page >= iPage)
//			{
//				this.cache.Lists[sCacheName].attr('data-x-action', 'delete');
//				delete this.cache.Lists[sCacheName];
//			}
//		}
//
//		if (bPrepearHash && this.currentPane)
//		{
//			if ('delete' === this.currentPane.attr('data-x-action'))
//			{
//				this.webmail.prepearHash(this.currentPane.attr('rel'));
//			}
//		}
//	},
//
	/**
	 * @return {void}
	 */
	clearXActionDelete: function ()
	{
		$('#right-pane #center-pane div[rel].hide', this.screenObj).remove('[data-x-action=delete]');
	}
}